import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../render';
import { ENEMY_WIDTH } from '../npc/enemy';

/**
 * 波次管理器
 * 负责管理敌人波次生成和难度控制
 */
export default class WaveManager {
  constructor(characterManager) {
    this.characterManager = characterManager;
    this.wave = 0;               // 当前波次
    this.enemiesPerWave = 3;     // 每波基础敌人数量
    this.spawnInterval = 60;     // 投放间隔(帧数)
    this.spawnTimer = 0;         // 投放计时器
    this.waveInterval = 180;     // 波次间隔(帧数)
    this.waveTimer = 0;          // 波次计时器
    this.enemiesToSpawn = 0;     // 待投放敌人数
    this.isSpawning = false;     // 是否正在投放
  }

  /**
   * 开始第一波敌人
   */
  startFirstWave() {
    this.wave = 1;
    this.enemiesToSpawn = this.enemiesPerWave;
    this.isSpawning = true;
    console.log(`[Wave] 开始第 ${this.wave} 波敌人，数量: ${this.enemiesToSpawn}`);
  }

  /**
   * 开始下一波敌人
   */
  startNextWave() {
    this.wave++;
    // 每波敌人数量逐渐增加，最多10个
    this.enemiesPerWave = Math.min(10, 3 + Math.floor(this.wave / 2));
    this.enemiesToSpawn = this.enemiesPerWave;
    this.isSpawning = true;
    this.spawnTimer = 0;
    console.log(`[Wave] 第 ${this.wave} 波敌人来袭! 数量: ${this.enemiesToSpawn}`);
  }

  /**
   * 更新投放逻辑
   */
  update() {
    if (!this.isSpawning) return;

    // 投放敌人
    if (this.enemiesToSpawn > 0) {
      this.spawnTimer++;
      if (this.spawnTimer >= this.spawnInterval) {
        this.spawnTimer = 0;
        this.spawnEnemy();
        this.enemiesToSpawn--;
      }
    } else {
      // 检查是否所有敌人都被消灭
      if (this.characterManager.getEnemies().length === 0) {
        this.isSpawning = false;
        this.waveTimer = this.waveInterval;
        console.log(`[Wave] 第 ${this.wave} 波敌人已消灭，准备下一波...`);
      }
    }

    // 波次倒计时
    if (this.waveTimer > 0) {
      this.waveTimer--;
      if (this.waveTimer <= 0) {
        this.startNextWave();
      }
    }
  }

  /**
   * 投放单个敌人
   */
  spawnEnemy() {
    try {
      const enemyType = Math.random() > 0.7 ? 2 : 1; // 30%几率生成强力敌人
      // 生成在中心区域附近(半径50-200px)
      const centerX = SCREEN_WIDTH / 2;
      const centerY = SCREEN_HEIGHT / 2;
      const angle = Math.random() * Math.PI * 2;
      const radius = 50 + Math.random() * 150; // 50-200px
      const x = centerX + Math.cos(angle) * radius;
      const y = centerY + Math.sin(angle) * radius;
      
      const enemy = this.characterManager.createEnemy(enemyType, x, y);
      
      if (!enemy) {
        console.error('[Wave] 敌人生成失败！');
        return null;
      }

      console.log(`[Wave] 投放敌人 类型:${enemyType} 位置:(${x.toFixed(0)},${y.toFixed(0)})`);
      
      // 验证敌人是否被添加到角色列表
      if (!this.characterManager.characters.includes(enemy)) {
        console.warn('[Wave] 敌人未正确添加到角色管理器！');
      }
      
      return enemy;
    } catch (error) {
      console.error('[Wave] 敌人生成时发生错误:', error);
      return null;
    }
  }

  /**
   * 获取当前波次信息
   */
  getWaveInfo() {
    return {
      wave: this.wave,
      enemiesRemaining: this.characterManager.getEnemies().length,
      enemiesToSpawn: this.enemiesToSpawn,
      isSpawning: this.isSpawning
    };
  }
}